package whf.framework.meta.entity;

import java.util.List;
import java.util.Set;

import whf.framework.meta.Metaable;

/**
 * @author wanghaifeng
 *
 */
public abstract interface IMeta<PropertyType extends IProperty> extends Metaable {
	public void setId(long id);
	
	public long getId();
	
	/**
	 * 用在视图中的唯一代码
	 * @modify wanghaifeng Aug 22, 2006 9:34:58 PM
	 * @param code 
	 */
	public void setCode(String code);
	
	public String getCode();
	/**
	 * @return 对象定义属性
	 */
	public abstract Set<PropertyType> getProperties();
	
	/**
	 * 设置属性
	 * @param properties
	 */
	public abstract void setProperties(Set<PropertyType> properties);
	
	/**
	 * 向集合中增加一个属性
	 * @param bp
	 */
	public void addProperty(PropertyType bp);
	
	/**
	 * 属性是否存在于集合中
	 * @param bp
	 * @return
	 */
	public boolean existsProperty(PropertyType bp);
	
	/**
	 * 使用属性能名判断
	 * @param propName
	 * @return
	 */
	public boolean existsProperty(String propName);
	
	/**
	 * 根据属性名搜索一个属性
	 * @param propName
	 * @return
	 */
	public PropertyType findProperty(String propName);
	
	/**
	 * @return bo名称
	 */
	public String getName();
	
	/**
	 * 设置bo名称
	 * @param name
	 */
	public void setName(String name);
	
	public String getRemarks();
	
	public void setRemarks(String remarks);
	
	/**
	 * 报表模板
	 * @return
	 */
	public String getReportTemplate();
	
	public void setReportTemplate(String template);
	
	/**
	 * @return sorted properties
	 */
	public List<PropertyType> getSortedProperties();
}
